package Guigu4.Final;
/*
 * final:最终的
 * 
 * 1、final 可以用来修饰的结构：类、方法、变量
 * 
 * 2、final 用来修饰一个类：此类不能被其他类所继承。
 *          比如：String 类、system类、StringBuffer类
 *          
 * 3、final 用来修饰方法：表明此方法不可以被重写
 *          比如：Object类中getClass();
 *          
 * 4、final 用来修饰变量：此时的“变量”就称为是一个常量
 *       4.1、final修饰属性：可以考虑赋值的位置有：显示初始化、代码块中初始化、构造器中初始化
 *       4.2、final修饰局部变量：
 *              尤其是使用final修饰形参时，表明此形参是一个常量。当我们调用此方法时，给常量形参赋一个实参。一旦赋值以后
 *              ，就只能在方法体内使用此形参，但不能进行重新赋值。
 * 
 * static final 用来修饰属性：全局常量
 */
public class FinalTest {

	public static void main(String[] args) {
		FinalTest t = new FinalTest("男");
		System.out.println(t.age+"\n" + t.name+"\n" + t.gender+"\n");
		t.eat(5);
	}
	
	final String name = "石文学";//显示赋值
	final int age;
	final String gender;
	
	{
		age = 18;//代码块中赋值
	}
	
	public FinalTest(String gender)//构造器中赋值
	{
		this.gender = gender;
	}
	
	public void eat(final int number)//final修饰局部变量
	{
//		number = 20;报错：因为final修饰形参，number就为常量，只能被赋一次值
		System.out.println(number);
	}
}

final class A
{
	int age;
}

//class B extends A
//{
//	
//}

class C
{
	public final void show()
	{
		System.out.println("hello");
	}
}

class D extends C
{
	String name;
//	private void show() {
//	                   不能被重写
//	}
}